iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
Software Development

Spring boot 從零到寫出ChatGPT系列 第 25

Spring boot 從零開始 (25) - Spring security 5.7 升級到6.x之間的改動

  • 分享至 

  • xImage
  •  

原本今天要繼續分享昨天身分驗證的主題,不過剛好Winnie這幾天遇到Spring boot升級後,搭配的Spring security升級遇到了很多改寫的部分,所以今天特別跟大家分享一下 /images/emoticon/emoticon08.gif避免大家日後也踩雷 ?!?!

Spring Security 5.7 和 6.X對照

(一) WebSecurityConfigurerAdapter 被棄用

  • 5.7版本
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((auth) -> auth
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
    }

}

第一個就遇到的是 咦? 為甚麼 WebSecurityConfigurerAdapter不能用了 !!!
因為在6.1版本的時候官網希望我們自行實作SecurityFilterChain來進行配置

  • 6.1版本
@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((auth) -> auth
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
        return http.build();
    }

}

(二) csrf().disable() 已棄用

  • 5.7版本
   @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .cors()
                .and()
                .csrf().disable()
                ...
  }

如果到6.1版本還這樣寫的話,你就會發現你的程式碼有錯誤
https://ithelp.ithome.com.tw/upload/images/20241010/20112118vXZZ9K4HIg.png
所以升級後要改寫成

  • 6.1版本
csrf(csrf -> csrf.disable())

那更漂亮簡潔的寫法也可以用

csrf(AbstractHttpConfigurer::disable)

(三) authorizeRequests 被棄用

  • 5.7版本
    我們都習慣用authorizeRequests(),這個也被替換成 authorizeHttpRequests
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .and()
            .httpBasic();
    }
  • 6.1 版本
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authorize) -> authorize
                        .requestMatchers("/endpoint").hasAuthority("USER")
                        .anyRequest().authenticated()
             )
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .and()
            .httpBasic();
    }

希望大家在要升級的時候可以少踩一點坑 /images/emoticon/emoticon06.gif

明天再繼續跟大家分享身分驗證吧!!!!!

參考來源

csrf
Spring Security6


上一篇
Spring boot 從零開始 (24) - Spring security 身分驗證Model建立
下一篇
Spring boot 從零開始 (26) - Spring security 帳號密碼身分驗證
系列文
Spring boot 從零到寫出ChatGPT30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言